/*
 【入门】木瓜地
  题目描述
    Bessie 不小心游荡出 Farmer John 的田地，而走进了相邻的农民的地。
    她举起一个木瓜，木瓜对奶牛来说可是不可多得的美味。
    这个木瓜林像一般的威斯康星州的田地一样被分割成一个 R 行 C 列的网格 (1 < = R <= 40, 1 <= C <= 40)。
    1). Bessie 可以从一个格沿着一条跟 X 轴或 Y 轴平行的直线走到邻接的另一个格。
    2). Bessie 发现一开始她自己在木瓜林的 (1, 1)，也就是第一行第一列慢悠悠地咀嚼著木瓜。
    3). Bessie 总是用她最信赖地双筒望远镜去数每一个邻接的格里挂着的木瓜的数目。
        然后她就游荡到那个有最多没有被吃掉的木瓜的邻接的格子（保证这样的格子只有一个）。
        按照这种移动方法，最终 Bessie 总是会在 (R, C) 停止然后吃掉那里的木瓜。

    给定这个木瓜林的大小及每个格的木瓜数 F_ij (1 <= F_ij <= 100), 要求 Bessie 一共吃了多少个木瓜。
  输入
    第一行: 两个空格隔开的整数 R 和 C.
    第 2 到 R+1 行: 第 i+1 行有 C 个空格隔开的整数，表示第 i 行的每个格的水果数。
      也就是 F_i1, F_i2, ..., F_iC.
  输出
    一个单独的整数，表示到 Bessie 吃完右下角 (R, C) 的木瓜回到牛棚的时候為止，一共在木瓜林吃掉了多少个木瓜。
  样例输入
    3 4
    3 3 4 5
    4 5 3 2
    1 7 4 2
  样例输出
    39
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int R, C;
    int a[45][45] = {};

    cin >> R >> C;
    for (int i = 1; i <= R; i++) {
        for (int j = 1; j <= C; j++) {
            cin >> a[i][j];
        }
    }

    int x = a[1][1];
    int i = 1, j = 1;
    while (i != R || j != C) {
        int k = i + 1, z = j;
        if (a[k][z] < a[i][j + 1]) {
            k = i;
            z = j + 1;
        }
        if (a[k][z] < a[i - 1][j]) {
            k = i - 1;
            z = j;
        }
        if (a[k][z] < a[i][j - 1]) {
            k = i;
            z = j - 1;
        }

        x = x + a[k][z];
        a[i][j] = 0;
        i = k;
        j = z;
    }

    cout << x;

    return 0;
}